package kr.hkit.powerjava.chapter26.service;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Scanner;

import kr.hkit.powerjava.chapter26.common.ConnectionFactory;
import kr.hkit.powerjava.chapter26.common.DBUtil;
import kr.hkit.powerjava.chapter26.dao.DaoInterface;

public abstract class AbsService<T> {
	protected DaoInterface<T> dao;
	protected Scanner sc;
	protected Connection connection;
	
	public AbsService(Scanner sc, Connection connection) {
		this.sc = sc;
		this.connection = connection;
	/*	prnMenu();*/
		
	}
	private void close(){
		DBUtil.close(connection);
	}
	
	public void prnMenu() {
		T item = null;
		int res = 0;
		do{
			System.out.print("1.입력\n2.삭제\n3.수정\n4.검색\n5.리스트보기\n6.종료\n");
			res = sc.nextInt();
		try {
		switch(res){
			case 1:
				//학생정보입력
				item = inputItemInfo(true); //학번, 성명, 국,영,수
					dao.insertItem(item);
				break;
			case 2:
				//삭제, 리스트를 보여주고 번호를 입력받음
				System.out.print("삭제할 학생정보를 입력하시오");
				item = inputItemInfo(false);
				dao.deleteItembyNo(item);
				break;
			case 3:
				//수정, 리스트를 보여주고 수정할 학생정보를 입력받음
				item = inputItemInfo(true);
				dao.updateItembyNo(item);
				break;
			case 4:
				//검색
				item = inputItemInfo(false); //학번, 성명
				try{
				item = dao.searchItem(item);
				}catch(ArrayIndexOutOfBoundsException e){
					System.out.println("학생 정보 없음");
				}
				break;
			case 5:
				prnSubMenu();
				break;
			default:
				close();
				res = 7;
		}
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
		}while(res<6);
	}
	
	public abstract T inputItemInfo(boolean gubun);
	public abstract void prnSubMenu();
}
